<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>作用域 变量提升</title>
	</head>
	<body>

		<script type="text/javascript">
			var n = 0;

			function b() {
				n++;
				console.log(n);
			}

			function a() {
				var n = 10;
				b();
			}
			b();
			a();
		</script>
	</body>
</html>
<!-- 
一、作用域
通常来说，一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代
码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突。、
通俗来说 变量起作用的区域
	1.全局作用域 
	整个js文件 或者 正script标签都起作用
	2.局部作用域
	函数作用域 块级作用域(ES6)
	3.变量作用域
	 全局变量  在全局作用域下面申明的变量
	 局部变量  在局部作用域下面申明的变量
	 - 全局变量：在任何一个地方都可以使用，只有在浏览器关闭时才会被销毁，因此比较占内存
	 - 局部变量：只在定义它的作用域内部使用，当其所在的代码块被执行时，会被初始化；当代码块运行结束后，就会被销毁，因此更节省内存空间
	 
	 垃圾回收机制  变量的本质 再内存申请一块空间,当一个变量使用完毕就回被回收(释放它的内存空间),但是 全局变量不会被回收
	 作用域 父子 按照定义的时候 认定
	4.作用域链
	当我们在某一个作用域里面去使用 某个变量的时候 如果自己作用域有的变量 用自己的 自己作用域没有的变量 
	去找父级  父级没有 就找父级的父级 直到找到全局作用域
	①
	 function f1() {
	     var num = 123;
	     function f2() {
	         console.log( num );//?
	     }
	     f2();
	 }
	 var num = 456;
	 f1();
	 ②
	 var a = 1;
	 function fn1() {
	     var a = 2;
	     var b = '22';
	     fn2();
	     function fn2() {
	         var a = 3;
	         fn3();
	         function fn3() {
	             var a = 4;
	             console.log(a); //a的值 ?
	             console.log(b); //b的值 ?
	         }
	     }
	 }
	 fn1();
	 5.变量提升
	 var  function let const
	  let const  作用域 认  块级作用域
	  var  认 函数作用域
	 6.变量冲突  
	 
 -->